package Day12;

public class Day12 {
    //API
    //JDK API 功能 字符串操作 集合操作 IO操作 线程操作
    //java.lang包(language缩写) 唯一不需要导包即可使用的包
    //java.util包(utility缩写) 常用工具类
    //java.io包(input/output缩写) 输入输出流
    //java.net包(network缩写) 网络编程
    //java.sql包(database缩写) 数据库编程
    //java.awt包(abstract window toolkit缩写) 抽象窗口工具包
    //java.text包(textual abbreviation缩写) 文本处理
    //java.applet包(applet abbreviation缩写) 窗体程序
    //java.beans包(bean abbreviation缩写) 窗体程序
    //java.security包(security abbreviation缩写) 安全性
    //java.util.zip包(zip abbreviation缩写) 压缩包
    //java.util.regex包(regular expression缩写) 正则表达式
    //java.util.concurrent包(concurrent abbreviation缩写) 并发编程
    //java.util.concurrent.atomic包(atomic abbreviation缩写) 原子操作
    //java.util.concurrent.locks包(locks abbreviation缩写) 锁
    //java.util.concurrent.collections包(collections abbreviation缩写) 集合操作
    //java.util.concurrent.synchronization包(synchronization abbreviation缩写) 同步操作
    //java.util.concurrent.scheduling包(scheduling abbreviation缩写) 计划任务
    //java.util.concurrent.executors包(executors abbreviation缩写) 线程池

    //文档注释规范
    //以/**开始 以*/结束:功能级的注释 以方法为单位 说明该方法的作用 或类为单位 声明该类的功能
    //写在类和方法开头 专门用于生成供API使用者进行参考的文档资料( /** */ )


    //只能在类 方法 常量上使用
    //@作者名
    //@版本号(整数 小数构成)只要改内容 版本号过就要改 1.204,07/04/09
    //@参见
    //@始于哪个JDK版本 Java是不向下兼容的 @JDK 1.8

    //字符串 引用类型 涵盖许多功能
    //基本类型是一个值 引用类型是一个对象(更立体)
    //储存在lang包里 与语法同等重要

    //特点 是不变对象
    //java.lang.String使用了final修饰 不能被继承
    //内部本质就是存储了字符char数组 字符串底层封装了字符数组及针对字符数组的操作算法
    //字符串一旦创建 对象内容不可改变
    //java字符串在内存中采用Unicode编码方式 任何一个字符对应两个字节的定长编码

    //Unicode unique-唯一的 code-代码 有三字节 四字节表示 但是用不到了 只用到前两个字节

    //String常量池 java为提高性能 创建字符串常量池 避免重复创建字符串对象 节省内存空间
    //字符串常量池中相同字符串字面量只会创建一个对象
    //s1="123abc"  s2="123abc"  s1==s2----true
    //s1="123abc"  s2="123"+"abc"  s1==s2----true(编译器的静态优化)
              //相同字符串字面量创建对象 地址是一致的 后续会重用
    //拼接(不是直接量之间的拼接 而是与至少一个变量拼接)就会产生新对象 且不会放在常量池中
    //s1="123abc"  s2="123"  s3=s2+"abc"  s1==s3----false
    /*对于那些涉及变量参与的字符串拼接操作，其结果字符串不会自动被放入字符串常量池，
    而是作为新的对象在堆上创建。这是因为这类拼接只有在运行时才能确定结果，不符合编译器进行静态优化的条件。
    若要将拼接结果存入常量池以节省内存和提高效率，
    可以使用 String.intern() 方法显式地将拼接后的字符串加入常量池。*/

    //编译器的预计算特性 运算表达式运算符两侧均为字面量 则会进行运算 并将结果替换该表达式

    //常用方法
    //1.字符串长度 length()
           //int length() 获取字符串长度
    //2 使用indexOf()方法实现检索
           //返回给定字符串在当前字符串中首次出现的索引值 如果不存在返回-1
           //int indexOf(String str,数) 数字表示从当前位置开始检索
    //3 使用substring()方法截取字符串
    //java用两个数字表示范围时 第一个数字表示起始位置 第二个数字表示结束位置 含头不含尾
    //4 使用trim()方法去除字符串两端的空白字符
           //空格只是空白字符的一种 空白字符还有 换行符 tab(制表符) 回车符等等 看不见但是占据着位置
    //5 charAt()方法获取指定索引位置的字符
    //6 startsWith()方法 判断字符串是否以指定字符串开头
    //7 endsWith()方法 判断字符串是否以指定字符串结尾
    //8 equals()方法 判断字符串是否相等
    //9 equalsIgnoreCase()方法 判断字符串是否相等 忽略大小写


}
